﻿//-------------------------------------------------------------------------------
// <copyright file="ConnectionPermissionMappingAttribute.cs" company="TaskyMedia LLC">
//     Copyright (c) TaskyMedia LLC.
// </copyright>
//-------------------------------------------------------------------------------

/*
 * Copyright (c) 2010, TaskyMedia LLC
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 *   Redistributions of source code must retain the above copyright notice, this 
 *     list of conditions and the following disclaimer.
 *   Redistributions in binary form must reproduce the above copyright notice, this
 *     list of conditions and the following disclaimer in the documentation and/or
 *     other materials provided with the distribution.
 *   Neither the name of TaskyMedia LLC nor the names of its contributors may be used
 *   to endorse or promote products derived from this software without specific prior
 *   written permission.
 *   
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE. 
 */

namespace FBGraphApi
{
    using System;

    /// <summary>
    /// Attribute to map the <see cref="ExtendedPermission" /> permission and connection
    /// to the string in Facebook's Graph API.
    /// </summary>
    [AttributeUsage(AttributeTargets.Field)]
    public sealed class ConnectionPermissionMappingAttribute : ExtendedPermissionMappingAttribute
    {
        /// <summary>
        /// The name of the object connection in Facebook.
        /// </summary>
        private string[] _connectionNames;

        /// <summary>
        /// Specifies whether the permission maps to the user's connection
        /// or a friend's connection.
        /// </summary>
        private bool _isSelf;

        /// <summary>
        /// Initializes a new instance of the <see cref="ConnectionPermissionMappingAttribute"/> class.
        /// </summary>
        /// <param name="permissionName">Name of the attribute in Facebook.</param>
        /// <param name="isSelf">Specifies whether the permission maps to the user's connection
        /// or a friend's connection.</param>
        /// <param name="connectionNames">Names of the connections.</param>
        public ConnectionPermissionMappingAttribute(string permissionName, bool isSelf, params string[] connectionNames)
            : base(permissionName)
        {
            this._connectionNames = connectionNames;
            this._isSelf = isSelf;
        }

        /// <summary>
        /// Gets the names of the connections.
        /// </summary>
        /// <value>The names of the connections.</value>
        public string[] ConnectionNames
        {
            get
            {
                return this._connectionNames;
            }
        }

        /// <summary>
        /// Gets a value indicating whether the permission maps to the user's connection
        /// or a friend's connection.
        /// </summary>
        /// <value><c>true</c> if this instance is for the current user;
        /// otherwise, <c>false</c>.</value>
        public bool IsSelf
        {
            get
            {
                return this._isSelf;
            }
        }
    }
}
